foo.o
, lib.o
for RISC-V)。每個 object file 包含文本段(Text Segment)、數據段(Data Segment)、符號表、重定位表等資訊。a.out
for RISC-V)。beq
、bne
、jal
、auipc/addi
):這類地址不需要重定位,因為這些指令使用與當前 PC 相對的地址。jal
或 auipc/jalr
):這些引用需要重定位,因為組譯時無法確定外部函數的地址。lw
、sw
、lui/addi
):這些數據段在組合時會被重新安置,因此也需要重定位。jal
指令。lui
、addi
和 auipc/jalr
當跳轉到外部時也需要重定位。0x10000
開始。printf
)。確定絕對地址後,Linker 會填入相應的機器碼。